package cn.itsource.interceptor;

import cn.itsource.system.jwt.JwtUtil;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class LoginInterceptor  implements HandlerInterceptor {

    public boolean  preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String requestType = request.getHeader("requestType");
        if (requestType != null){
            return true;
        }
        // 获取请求头里面的参数
        String token = request.getHeader("token");
        // 判断token是否为空
        if (token != null){ // 登陆成功
            try {
                JwtUtil.parseJwtToken(token); // 解析token并且放行
                return true;
            } catch (Exception e) { // 登录过期
                // response是一个HttpServletResponse对象，它代表了服务器对客户端的响应。
                // setContentType方法用于设置响应的内容类型，
                // 而"application/json"就是告诉客户端，响应体中的内容是JSON格式的。
               response.setContentType("application/json"); // 服务器响应给前端的内容为json格式的数据
                /*
                getWriter()：这个方法返回一个PrintWriter对象，用于向客户端发送字符数据。
                println()：这个方法用于向客户端发送一行数据。在这个例子中，它发送的是一个JSON字符串。
                "{\"success\":false,\"message\":\"toLogin\"}"：这是一个JSON字符串，表示一个对象，该对象有两个属性：success和message。success的值是false，message的值是toLogin。
                综上所述，这行代码的作用是向客户端发送一个JSON响应，告诉客户端某个操作没有成功（success为false），并且提供了一个消息（message为toLogin），可能是指示客户端需要登录或执行其他操作。*/
               response.getWriter().println("{\"success\":false,\"message\":\"toLogin\"}"); // 向前端返回一行son格式的字符串信息
                // 登录拦截
               return false;
            }
        }else {
            response.setContentType("application/json");
            response.getWriter().println("{\"success\":false,\"message\":\"toLogin\"}");
            return false;
        }
    }
}
